package com.bi.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.bi.entity.ChartComponent;

import java.util.List;
import java.util.Map;

/**
 * 图表组件服务接口
 * 
 * @author BI Platform Team
 * @since 1.0.0
 */
public interface ChartComponentService extends IService<ChartComponent> {

    /**
     * 分页查询图表组件
     * 
     * @param current 当前页
     * @param size 页大小
     * @param params 查询参数
     * @return 分页结果
     */
    IPage<ChartComponent> getChartComponentPage(long current, long size, Map<String, Object> params);

    /**
     * 创建图表组件
     * 
     * @param chartComponent 图表组件信息
     * @return 创建结果
     */
    boolean createChartComponent(ChartComponent chartComponent);

    /**
     * 更新图表组件
     * 
     * @param chartComponent 图表组件信息
     * @return 更新结果
     */
    boolean updateChartComponent(ChartComponent chartComponent);

    /**
     * 删除图表组件
     * 
     * @param id 组件ID
     * @return 删除结果
     */
    boolean deleteChartComponent(Long id);

    /**
     * 根据图表类型查询组件
     * 
     * @param chartType 图表类型
     * @return 组件列表
     */
    List<ChartComponent> getChartComponentsByType(String chartType);

    /**
     * 获取图表组件统计信息
     * 
     * @return 统计信息
     */
    Map<String, Object> getChartStatistics();

    /**
     * 测试数据源连接
     * 
     * @param chartComponent 图表组件配置
     * @return 测试结果
     */
    Map<String, Object> testChartDataSource(ChartComponent chartComponent);

    /**
     * 获取图表数据
     * 
     * @param componentId 组件ID
     * @param params 查询参数
     * @return 图表数据
     */
    Map<String, Object> getChartData(Long componentId, Map<String, Object> params);

    /**
     * 预览图表数据
     * 
     * @param chartComponent 图表组件配置
     * @param params 查询参数
     * @return 预览数据
     */
    Map<String, Object> previewChartData(ChartComponent chartComponent, Map<String, Object> params);

    /**
     * 刷新图表缓存
     * 
     * @param componentId 组件ID
     * @return 刷新结果
     */
    boolean refreshChartCache(Long componentId);

    /**
     * 复制图表组件
     * 
     * @param componentId 原组件ID
     * @param newName 新组件名称
     * @return 复制结果
     */
    ChartComponent copyChartComponent(Long componentId, String newName);

    /**
     * 生成图表配置模板
     * 
     * @param chartType 图表类型
     * @param dataConfig 数据配置
     * @return 图表配置模板
     */
    Map<String, Object> generateChartTemplate(String chartType, Map<String, Object> dataConfig);

    /**
     * 验证图表配置
     * 
     * @param chartConfig 图表配置
     * @return 验证结果
     */
    Map<String, Object> validateChartConfig(Map<String, Object> chartConfig);

    /**
     * 导出图表
     * 
     * @param componentId 组件ID
     * @param format 导出格式（png, jpg, pdf, svg）
     * @param params 导出参数
     * @return 导出结果
     */
    Map<String, Object> exportChart(Long componentId, String format, Map<String, Object> params);

    /**
     * 获取热门图表类型
     * 
     * @param limit 限制数量
     * @return 热门图表类型列表
     */
    List<Map<String, Object>> getPopularChartTypes(Integer limit);
}